package object;

/**
 * 测试Object中相关方法的应用场景
 */
public class Demo {
    public static void main(String[] args) {
        Point p = new Point(1,2);
        /*
            Object中常被子类重写的第一个方法:toString方法.
            该方法的作用是将当前对象转换为一个字符串.

            通常我们在向控制台输出对象时如下:
            System.out.println(p);
            而该方法就会调用p.toString()将该对象转换为一个字符串后,将该字符串输出到控制台.

            Object的toString()方法默认实现逻辑返回的字符串格式:类名@地址
            对于将一个对象输出到控制台上查看信息时,输出上述内容对开发帮助不大,因此在这样的情况下
            我们就会在子类上重写该方法.
            重写原则:
            toString方法返回的字符串应当包含该对象的属性信息,可以直观了解对象保存的值
         */
//        String line = p.toString();
//        System.out.println(line);
        System.out.println(p);

        /*
            在java中任何类型与字符串连接结果都是字符串
            其它类型会被转换为String再和字符串连接.而其它类型转换为字符串时就是通过toString方法
         */
        String line = "这个类是:" + p;//会调用p.toString()进行转换
        System.out.println(line);


        Point p2 = new Point(1,2);
        /*
            面试问题:
            ==与equals的意义分别是什么?
            "=="对于引用类型而言是比较是否为同一个对象
            "equals"对于引用类型而言是比较两个对象的内容是否相同
         */
        System.out.println(p==p2);//false  并非同一个对象,地址不相同
        /*
            Object中另一个常被子类重写的方法:
            boolean equals(Object obj)
            该方法的作用是比较两个对象的内容是否相同.但是Object中默认实现是使用"=="比较地址
            所以子类不重写该方法时,该方法没有实际意义.
         */
        System.out.println(p.equals(p2));
    }
}






